package com.umpay.privi.dao;

import java.util.List;
import java.util.Map;

import com.umpay.common.persist.PageBean;
import com.umpay.common.persist.ibatis.DataAccessException;
import com.umpay.common.persist.ibatis.exception.IntegrityViolationException;

/**
 * 针对单个Entity对象的操作定义，使用范型的实现
 * 
 * @author Jinlu
 * @version 2008.08.13
 */
public interface EntityDao<T> {

	/**
//	 * 查询指定的实体
//	 * @param o 
//	 * @return
//	 * @throws DataAccessException 
//	 */
//	T get(Serializable o) throws DataAccessException;
//	/**
//	 * 根据联合主键查询
//	 * 
//	 * @param pkMap
//	 * @return
//	 */
//	public T get(Map<String,Object> pkMap)throws DataAccessException;
	/**
	 * 根据指定的条件查询记录
	 * @param t
	 * @return
	 * @throws DataAccessException 
	 */
	List<T> findBy(T t) throws DataAccessException;
	
	/**
	 * 根据指定的条件分页查询记录
	 * @param pageBean
	 * @param t
	 * @throws DataAccessException 
	 */
	void pagedFindBy(PageBean pageBean, T t) throws DataAccessException;

	/**
	 * 保存实体
	 * @param t
	 * @throws DataAccessException 
	 * @throws ViolationException 
	 */
	void insert(T t) throws DataAccessException, IntegrityViolationException;
	
	/**
	 * 更新实体
	 * @param t
	 * @throws DataAccessException 
	 */
	int update(T t) throws DataAccessException;
	/**
	 * 
	 * desc:根据map参数条件查询列表（分页）
	 * <p>创建人：liuguangjun , May 10, 2013 4:37:00 PM</p>
	 * @param t
	 * @param startIndex 开始记录索引
	 * @param pageSize 一页的记录数
	 * @return
	 * @throws DataAccessException
	 */
	List<T> findPageList(Map<String,Object> queryMap,Integer startIndex,Integer pageSize) throws DataAccessException ;
	/**
	 * 
	 * desc:根据条件查询对象列表（分页）
	 * <p>创建人：liuguangjun , May 10, 2013 4:37:00 PM</p>
	 * @param t
	 * @param startIndex 开始记录索引
	 * @param pageSize 一页的记录数
	 * @return
	 * @throws DataAccessException
	 */
	Integer findPageList_count(Map<String,Object> queryMap) throws DataAccessException ;
	
	 void batchInsertOrUpdate(final List<T> objList)throws DataAccessException;
}
